package com.c2b.algorithm.leetcode.base;

import java.util.ArrayList;
import java.util.List;

/**
 * <a href="https://leetcode.cn/problems/keyboard-row/">键盘行</a>
 * <p>给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。
 * 美式键盘 中：
 * <li>第一行由字符 "qwertyuiop" 组成。</li>
 * <li>第二行由字符 "asdfghjkl" 组成。</li>
 * <li>第三行由字符 "zxcvbnm" 组成。</li>
 * </p>
 * <pre>
 * 示例 1：
 *      输入：words = ["Hello","Alaska","Dad","Peace"]
 *      输出：["Alaska","Dad"]
 *
 * 示例 2：
 *      输入：words = ["omk"]
 *      输出：[]
 *
 * 示例 3：
 *      输入：words = ["adsdf","sfd"]
 *      输出：["adsdf","sfd"]
 * </pre>
 * <b>提示：</b>
 * <li>1 <= words.length <= 20</li>
 * <li>1 <= words[i].length <= 100</li>
 * <li>words[i] 由英文字母（小写和大写字母）组成</li>
 *
 * @author c2b
 * @since 2023/4/14 16:30
 */
public class LC0500FindWords_S {

    public String[] findWords(String[] words) {
        // 从a-z，每个字符在键盘中的行号
        String rowIdx = "12210111011122000010020202";
        List<String> resList = new ArrayList<>();
        for (String word : words) {
            // 判断当前字符串的首字符出现在第几行
            boolean isValid = true;
            // 首字符出现的行号
            char idx = rowIdx.charAt(Character.toLowerCase(word.charAt(0)) - 'a');
            for (int j = 0; j < word.length(); j++) {
                if (rowIdx.charAt(Character.toLowerCase(word.charAt(j))-'a') != idx) {
                    isValid = false;
                    break;
                }
            }
            if (isValid) {
                resList.add(word);
            }
        }
        String[] ans = new String[resList.size()];
        for (int i = 0; i < resList.size(); ++i) {
            ans[i] = resList.get(i);
        }
        return ans;
    }
}
